Master contact list management, Constant Contact integration, ME Score workflows, SMS/text messaging, and comprehensive testing strategy for the M&C system
The M&C module eliminates manual contact management workflows by automating contact list creation, deduplication, and synchronization with Constant Contact. It bridges member databases with email marketing systems and SMS campaigns, enabling faster, cleaner contact acquisition for marketing initiatives.
The module supports three major operational areas: Contact List Management & Constant Contact Integration, ME Score Integration, and Text Messaging (SMS).
Contact lists are created from four data sources: Committees (with year/classification filters), Groups (with year/classification), Events (with year/classification/sub-classification and optional sponsors), and Contact Types (with company type/region/primary/all individuals/individual type options).
Member Engagement reports allow QA to select companies directly from scoring results and create contact lists with a single click. ME Score lists are automatically prefixed with "ME-", are non-editable, and display source indicators to show they were generated from engagement data.
Twilio integration enables SMS campaigns triggered alongside email events. SMS is a complement to email, not a replacement—both are sent when triggered. SMS supports static templates with dynamic field substitution, and individuals can opt out via "do not text" checkbox.
M&C eliminates multi-step manual workflows: no more exporting from AMS, deduplicating in spreadsheets, uploading to CC, or managing growing CC list limits. It reduces time-to-campaign from days to minutes and eliminates human error in contact acquisition. Cleaner lists mean better email deliverability and SMS compliance.
Every contact list follows this lifecycle in the system:
CC integration operates on two levels: contact sync and list sync. Contact sync pushes Email, First Name, Last Name from AMS to CC, excluding individuals with "Do Not Email" checked. List sync creates CC lists with "sync_" prefix containing only Active lists. The system handles orphan foreign keys if a CC list is deleted externally but AMS still references it.
Constant Contact limits the number of lists a chapter account can maintain. The M&C module respects this limit by only syncing Active lists. A chapter must deactivate lists to prevent hitting the limit. If a list is deleted from CC externally, AMS may still consider it active—the system must handle this orphan FK gracefully without breaking sync.
The Contact List Builder is the entry point for creating contact lists. Users select from four independent data sources, each with distinct filter options:
After selection, the system deduplicates across all sources and displays results in a table (Name, Email, Company). Users can remove unwanted contacts, then either save the list, save as template, or proceed to CC sync.
The Browse Contact Lists page displays a table of all saved lists with columns: List Name, Status (Active/Inactive), Last Synced, Contact Count. Two key actions are available:
Additional actions: Activate/Deactivate, Delete, Export (CSV/Excel).
When editing a list, the Contact List Builder pre-populates with the saved selection. Regenerating the list COMPLETELY REPLACES previous contacts. Manual removals are NOT preserved—the system rebuilds from scratch. A warning is displayed when editing lists that are actively syncing to CC.
Edit List modifies the EXISTING list and regenerates contacts. Load Criteria creates a NEW list from a template. This distinction is critical for understanding data loss scenarios and backup strategies.
M&C requires API credentials to sync with Constant Contact. The CC Configuration section accepts API Key and API Secret, provides a Test Connection button to validate credentials, and displays Connection Status (Connected, Not Connected, Error). Settings are saved and persistent.
CC Sync has two components: contact sync and list sync. Contact sync pushes member data (Email, First Name, Last Name) to CC, excluding individuals with "Do Not Email" checked. List sync creates CC lists with "sync_" prefix, containing only Active lists. Both run on configurable cron schedules.
Sync Report shows: last attempted time, status (Success/Failed), contacts synced, lists created, lists updated, and active list counts relative to chapter limit.
From a Company Report Results page, QA checks one or more companies. A "Create Contact List" modal appears. The system auto-prefixes the list name with "ME-", provides a contact type dropdown (defaults to Primary Contact), and displays a source indicator showing the list was generated from ME Score data. Lists are non-editable after creation.
SMS requires Twilio API credentials (Account SID, Auth Token). Static SMS templates with dynamic fields (e.g., {{FirstName}}, {{CompanyName}}) are defined once and used across all campaigns. SMS is triggered alongside email events—both are sent simultaneously when conditions are met.
SMS is sent only if the individual has a phone number AND has not opted out via "do not text" checkbox. The system respects the opt-in-by-default model.
Both Browse Companies and Browse Individuals pages support CSV and Excel export. Exports respect current filters and only include displayed columns, not all available data. This allows for flexible, context-aware exports.
M&C testing spans six major functional areas, each with critical validation points:
Deduplication is the heart of M&C value. Test with 10+ overlapping scenarios: 1 person in 3 committees + 2 groups + 1 event; 5 people in same committee; duplicates with variant names (John vs Jon). Verify dedup works consistently and predictably.
The M&C module has 22 critical business rules that govern behavior. Click each to expand:
Contact List Management is accessed at Contacts > Contact Lists in the AMS navigation. Level 2+ membership required.
Contact lists are created from exactly four independent data sources: Committees, Groups, Events, Contact Types. No other sources available.
Empty groups are excluded from Contact List Builder results. Only groups with at least one individual member appear in selections.
The system automatically removes duplicates when the same individual appears across multiple data sources (e.g., in 2 committees and 1 event). Deduplication is transparent and happens during results generation.
Edit List modifies the existing list in place. Load Criteria creates a NEW list from the template. This is a critical distinction for data loss prevention.
When a list is regenerated via Edit List, the ENTIRE contact roster is replaced with fresh results from current criteria. Previous contacts are discarded.
If you removed 10 contacts from a list before saving, then regenerate the list, those 10 removed contacts reappear. Manual removals are not persistent across regenerations.
When editing a list that is actively syncing to Constant Contact, the system displays a warning that regeneration will push new contacts to CC.
Deleting a list in AMS stops future syncs to that CC list. However, the CC list itself is NOT deleted—it remains in CC and must be cleaned up manually.
All lists created via CC Sync are automatically prefixed with "sync_" to distinguish them from manual lists created in CC. E.g., "sync_Gold Members".
Inactive lists do not sync to CC and do not count toward the chapter's CC list limit. Deactivating a list stops future syncs and frees up a list slot.
If a CC list is deleted externally but AMS still has an active reference to it, the system gracefully handles the orphan FK—it attempts sync, fails, reports error, but does not crash.
Individuals with "Do Not Email" checked are excluded from CC contact sync. AMS enforces this. CC opt-outs are NOT written back to AMS.
Contact lists created from ME Score reports are automatically prefixed with "ME-" (e.g., "ME-Q1 High Engagement"). Prefix is non-editable.
Engagement scores are calculated at the company level, not for individual people. A company's score reflects aggregate participation.
ME scores are calculated in real-time from current data, not stored snapshots. A list created today from scores may differ from the same list created tomorrow if participation changed.
When creating an ME list and the selected contact type doesn't exist for a company, the system falls back to Primary Contact. Default fallback is transparent.
SMS templates support plain text only. No HTML, no formatting, no emojis. Static templates with dynamic field substitution only.
Individuals are opted in to SMS by default. They must explicitly check "Do Not Text" to opt out. Opt-out is at individual level.
SMS is not a replacement for email. When an email campaign is triggered, SMS is sent simultaneously to eligible individuals (with phone number, not opted out).
SMS is only sent if both conditions are met: (1) individual has phone number on file, and (2) individual has not opted out ("Do Not Text" unchecked).
CC Sync runs automatically on a configurable cron schedule (e.g., daily, hourly). The schedule is defined in environment config and monitored. Failed runs are logged and reported in Sync Report.
When exporting from Browse Companies or Browse Individuals, the export includes only displayed columns and respects any active filters. Full table not exported.
Real-world QA scenarios test edge cases and integration points. Work through these scenarios to validate system behavior:
Setup: Chapter account at 49/50 CC list limit. User creates a new contact list and tries to activate/sync.
Questions: Does system prevent sync? What error is shown? Can user deactivate an existing list to free up a slot and then sync the new one?
Expected Behavior: System should prevent sync/activation if limit would be exceeded. Clear error message. Deactivating one list should free a slot immediately.
Setup: A list is synced to CC successfully. Then, the list is deleted directly in Constant Contact (not via AMS). AMS still has active reference to deleted CC list.
Questions: What happens on next sync? Does system crash? Does it gracefully handle orphan FK? Can user re-sync or must they delete in AMS first?
Expected Behavior: Sync fails gracefully. Error logged. Sync Report shows "Failed" status. User can deactivate/delete in AMS to resolve.
Setup: Individual is in an active CC-synced list. Their contact record is updated to check "Do Not Email". Next sync runs.
Questions: Is individual removed from CC sync? Is existing CC record deleted? Is individual still in AMS list but marked as excluded?
Expected Behavior: Individual not included in next contact sync. If list is regenerated, they don't appear. Existing CC record unaffected (AMS doesn't delete from CC).
Setup: ME Score list created (ME-Q1 Report). User tries to click Edit List.
Questions: Is Edit option hidden? Is there a warning? Can user regenerate an ME list?
Expected Behavior: ME lists should not be editable. Edit option is disabled/hidden. Attempting to edit shows message "ME Score lists are not editable."
Setup: Email campaign triggers to a list of 100 individuals. 20 individuals have no phone number on file. SMS is triggered alongside email.
Questions: Do the 20 without phones receive email? Do they not receive SMS? Is there an error or silent skip?
Expected Behavior: All 100 receive email. Only 80 with phone numbers receive SMS. No error. SMS skipped silently for those without numbers.
Setup: John Smith (john@acme.com) is member of: Board Committee, 2 Other Committees, 3 Groups, 1 Event, 1 Contact Type.
Questions: Does John appear once in results? Does order matter? How is email dedup key confirmed?
Expected Behavior: John appears exactly once in results. Dedup is by email (primary key). Name+Company used if email missing. Results are consistent regardless of selection order.
Setup: List A is saved as template. User saves List B using "Load Criteria" from List A. Then List A is deleted.
Questions: Does List B still exist and function? Can user still load criteria from List B? Are templates versioned?
Expected Behavior: List B exists independently. Load Criteria copies criteria at creation time, not linked to original. Deleting List A doesn't affect List B.
Before QA testing begins, the following data must be loaded into the test environment:
Use a dedicated Constant Contact sandbox account and Twilio test account. Never test against production CC/Twilio. Schedule cron jobs frequently (every 5 minutes) in test environment for faster test cycles. Keep test data stable across test runs by resetting non-critical data between sprints.